package com.tbit.uqbike.service.business;

import com.tbit.uqbike.object.business.NoticeSearch;
import com.tbit.uqbike.object.business.NoticeStatisticsSearch;
import com.tbit.uqbike.object.pojo.Notice;
import com.tbit.uqbike.object.pojo.NoticeAll;
import com.tbit.uqbike.object.pojo.NoticeStatistics;
import com.tbit.uqbike.object.pojo.dto.NoticeStatisticsDTO;
import com.tbit.uqbike.object.pojo.vo.NoticeVO;
import com.tbit.uqbike.object.value.LoginInfo;

import java.util.*;

/**
 * 公告表(Notice)表服务接口
 *
 * @author shanyong.mo
 * @since 2025-02-18 14:53:32
 */
public interface NoticeService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    NoticeAll queryById(Integer id);

    /**
     * @description: 批量查询
     * @param: idList 查询的id集合
     * @return: java.util.List<Notice>
     */
    List<NoticeAll> queryByIds(List<Integer> idList);

    /**
     * 分页查询
     *
     * @param noticeSearch   筛选条件
     * @return 查询结果
     */
    List<NoticeAll> queryByPage(NoticeSearch noticeSearch, LoginInfo loginInfo);

    /**
     * 查询总数
     *
     * @param noticeSearch 筛选条件
     * @return 查询结果
     */
    Integer queryCount(NoticeSearch noticeSearch);


    /**
     * 新增数据（会判断null字段，null字段不插入）
     *
     * @param noticeVO 实例对象
     */
    void insertCheckNull(NoticeVO noticeVO, LoginInfo loginInfo);


    /**
     * 更新数据（会判断null字段，null字段不更新）
     *
     * @param noticeVO 实例对象
     */
    void updateCheckNull(NoticeVO noticeVO);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);

    /**
     * @description: 获取用户公告列表
     * @author: mo.shanyong
     * @date: 2025/2/19 17:16
     * @param: pageNum 页码
     * @param: pageSize 页长
     * @param: loginInfo 登录用户
     * @param: platform 平台：1、客户端；2、管理端；3、运维端
     * @return: java.util.List<com.tbit.uqbike.object.pojo.Notice>
     */
    List<Notice> getUserNoticeList(Integer pageNum,Integer pageSize,LoginInfo loginInfo,Integer platform);

    /**
     * @description: 查询用户的公告总数
     * @author: mo.shanyong
     * @date: 2025/2/19 18:08
     * @param: loginInfo
     * @param: platform 平台：1、客户端；2、管理端；3、运维端
     * @return: int
     */
    int getUserNoticeCount(LoginInfo loginInfo,Integer platform);

    /**
     * @description: 获取用户未读总数
     * @author: mo.shanyong
     * @date: 2025/2/24 20:23
     * @param: platform 平台：1、客户端；2、管理端；3、运维端
     * @param: loginInfo
     * @return: int
     */
    int getUserNotReadNoticeCount(Integer platform,LoginInfo loginInfo);

    /**
     * @description: 记录对公告的操作日志
     * @author: mo.shanyong
     * @date: 2025/2/20 15:52
     * @param: noticeId 公告id
     * @param: operateType 操作类型：1、曝光；3、点击；5、阅读
     * @param: loginInfo
     * @param: platform 平台：1、客户端；2、管理端；3、运维端
     * @return: java.lang.Integer
     */
    Integer recordNoticeLog(Integer noticeId ,Integer operateType,LoginInfo loginInfo,Integer platform);




}
